/**
 * @class 基类，包含绘图方法
 */
class Base {
    /**
     * @constructor
     * @overview 底层对象
     * @param {Object} paint - 含有painter方法的绘制对象
     */
    constructor(painter) {
        this.painter = painter;
        this.x = 0;
        this.y = 0;
        this.w = 0;
        this.h = 0;
        this._events = {};
        /**是否显示,默认false不显示 */
        this.isDisplay = false;
    }

    /**
     * 绘制方法
     * @param {Object} ctx - canvas的上下文环境
     */
    paint(ctx) {
        if (this.painter != undefined) {
            this.painter.paint(this, ctx);
        }
    }
}

/**
 * @class 精灵
 */
class Sprite extends Base {
    /**
     * @constructor
     * @overview 底层精灵对象
     * @param {String} name - 名字
     * @param {Array} behavior - 行为对象数组，数组成员为含有execute方法的对象
     */
    constructor(name, paint, behavior) {
        /**
         * @desc {Boolan} isDisplay - 是否可见 true 可见
         * @param {Date} cTime - 创建时间
         * @param {Date} nTime - 上一次行动时间
         */
        super(paint);
        this.name = name;
        /**创建时间 */
        this.cTime = new Date();
        /**行动的时刻 */
        this.nTime = new Date();
        this.behavior = behavior || [];
    }

    /**
     * 行为方法
     * @param {Object} ctx - canvas的上下文环境
     * @param {Date} now - 行动的时刻
     */
    update(ctx, now) {
        for (let i = 0; i < this.behavior.length; i++) {
            this.behavior[i].execute(this, ctx, now);
        }
    }

}

module.exports = Sprite;